import pygame
from pygame.locals import *
import time
import random
#玩家飞类
class HeroPlane:
    def __init__(self,screen_temp):
        self.x = 200
        self.y = 400
        self.screen= screen_temp
        self.image = pygame.image.load("./images/me.png")
        self.bullet_list = []#玩家的子弹列表
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))
        for b in self.bullet_list:
            b.display()
            b.move()
            if b.move():
                self.bullet_list.remove(b)
    def move_left(self):
        self.x -= 10
        if self.x<= 0:
            self.x = 0
    def move_right(self):
        self.x += 10
        if self.x>= 406:
            self.x = 406
    def fire(self):
        self.bullet_list.append(Bullet(self.screen,self.x,self.y))
        print(len(self.bullet_list))
#子弹类
class Bullet:
    def __init__(self,screen_temp,x,y):
        self.x = x+53
        self.y = y
        self.screen= screen_temp
        self.image = pygame.image.load("./images/pd.png")
    def display(self):
        
        self.screen.blit(self.image,(self.x,self.y))
    def move(self):
        self.y -= 20
        if self.y <= -20:
            return True
#敌机类
class EnemyPlane:
    def __init__(self,screen_temp):
        self.x = random.choice(range(408))
        self.y = -75
        self.screen = screen_temp
        self.image = pygame.image.load("./images/e"+str(random.choice(range(3)))+".png")
    def display(self):
        self.screen.blit(self.image,(self.x,self.y))

    def move(self,hero):
        self.y += 5
        #敌机出屏幕了
        if self.y>568:
            return True
        #遍历所有子弹并执行碰撞检测
        for bo in hero.bullet_list:
            if bo.x>self.x+12 and bo.x<self.x+92 and bo.y>self.y+20 and bo.y<self.y+60:
                hero.bullet_list.remove(bo)
                return True

#键盘控制函数
def key_control(hero_temp):
    #执行退出操作
    for event in pygame.event.get():
        if event.type == QUIT:
            print("exit()")
            exit()
    #获取按键信息
    pressed_keys = pygame.key.get_pressed()
    #print(pressed_keys)
    
    #做判断并执行对象的操作
    if pressed_keys[K_LEFT] or pressed_keys[K_a]:
        print("Left...")
        hero_temp.move_left()
    elif pressed_keys[K_RIGHT] or pressed_keys[K_d]:
        print("Right...")
        hero_temp.move_right()
    if pressed_keys[K_SPACE]:
        print("space...")
        hero_temp.fire()
#主程序函数    
def main():
    #创建游戏窗口
    screen = pygame.display.set_mode((512,568),0,0)
    #创建一个游戏背景
    background = pygame.image.load("./images/bg2.png")
    #创建玩家飞机
    hero = HeroPlane(screen)
    m = -968
    enemylist = []
    while True:
        #绘制画面
        screen.blit(background,(0,m))
        m+=2
        if m>=-200:
            m = -968
        #绘制玩家飞机
        hero.display()
        
        
        #执行键盘控制
        key_control(hero)
        #随机绘制敌机
        if random.choice(range(50))==10:
            enemylist.append(EnemyPlane(screen))
        #遍历敌机并绘制移动
        for em in enemylist:
            em.display()
            if em.move(hero):
                enemylist.remove(em)
        #更新显示
        pygame.display.update()
        #定时显示
        time.sleep(0.01)
if __name__=="__main__":
    main()
